Applications that use image data are found in many different fields, such as security control, television, broadcasting, social media, video telephony, videoconferencing, wireless devices, streaming media applications, remote desktop, cloud computing, and others. Image data may refer to video data, computer generated graphics data, desktop data, or any other type of data depicting a visual perception. Image data may be stored in a variety of medium (DVDs, Blu-Ray disks, mobile devices, memory sticks, hard-drive, etc) and may be transmitted through a variety of medium such as fiber optics, IP connections, USB, satellite, etc.
Image compression and decompression are performed to reduce the consumption of expensive resources, such as storage space or transmission bandwidth. In general, a codec (encoder/decoder) includes an encoder used to convert the source data into a compressed form occupying a reduced space prior to storage or transmission. The codec may also comprise a decoder which receives compressed data and converts it into a decompressed image or stream ready for display or for further processing. The codec may be a software implementation, a hardware implementation, or a combination thereof.
Two types of encoding exist, namely lossy and lossless. An encoder is lossless if the data once decoded is the exact copy of the source data. An encoder is lossy if the decoded data is not the exact copy of the source data. In general, encoders are made to be lossy due to the limits to the amount of compression that can be obtained with lossless compression techniques. However, in lossy encoders, the two goals of achieving better quality and compression efficiency are usually conflicting. Image data compression is usually a tradeoff between storage space, image quality, and the cost of hardware required to decompress the image data in a reasonable time.
In some instances, encoders/decoders will provide a combination of lossy and lossless compression/decompression schemes. There are some challenges in providing both lossy and lossless compression schemes in a single codec such that storage space, image quality, frequency of operation, and costs are all optimized.
When performing advanced video coding, syntax elements generated after the transformation and quantization steps are encoded to form a bit stream using variable length coding and/or arithmetic coding. Arithmetic coding, in particular, requires intensive computation and therefore, there is a need for optimizing the resources, such as bandwidth and memory footprint, as well as a need to improve the general performance of the codec.